package main

// 字符串反转

func main() {
	var s string = "abcdefg"
	reverseStr(s, 2)
}

func reverseStr(s string, k int) string {
	runes := []rune(s)
	//数组长度
	n := len(runes)
	for i := 0; i < n; i += 2 * k {
		start := i
		end := min(i+k, n)
		reverse(runes[start:end])

	}
	//fmt.Println(string(runes))
	return string(runes)
}

func reverse(runes []rune) {
	start := 0
	end := len(runes) - 1
	for start < end {
		runes[start], runes[end] = runes[end], runes[start]
		start++
		end--
	}
}

//func reverseStr(s string, k int) string {
//	runes := []rune(s)
//	n := len(runes)
//
//	for i := 0; i < n; i += 2 * k {
//		// 确定要反转的区间 [start, end)
//		start := i
//		end := min(i+k, n) // 关键：处理剩余字符不足k的情况
//
//		// 反转前k个字符
//		reverse(runes[start:end])
//	}
//
//	return string(runes)
//}
//
//// 辅助函数：反转切片
//func reverse(runes []rune) {
//	for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
//		runes[i], runes[j] = runes[j], runes[i]
//	}
//}
//
//// 辅助函数：取最小值
//func min(a, b int) int {
//	if a < b {
//		return a
//	}
//	return b
//}
